#include <iostream>
using namespace std;

//菱形继承 ：又称为钻石继承
//概念： 两个派生类（子类）同时继承一个基类（父类） ， 又有某一个类同时继承两个派生类

//菱形继承的问题有 ： 两个派生类（子类）都继承一个基类（父类） 会导致 子类继承了两份相同的数据 ，会导致资源浪费
//解决办法： 利用虚继承解决菱形继承的问题 ， 在子类继承时 在继承方式前加 virtual 将父类变为虚基类 ，即可解决

//我的理解是将父类变为虚基类后  虚继承 两个类的成员属性会共享同一份数据

class Animal {
public:
    int age;
};
class Sheep : virtual public Animal{};
class Tuo : virtual public Animal{};
class SheepTuo : public Sheep, public Tuo{};

int main(){
    SheepTuo st;
   // st.age = 10; //错误 ， 不明确 ，不知道sheeptuo中的年龄是继承sheep 还是Tuo 的 ，
   // 为解决 这个问题， 需要加作用域 或者父类中定义为纯虚函数
   // cout << st.age << endl;

    // st.Sheep::age = 10;
    // st.Tuo::age = 20;
    // cout << st.Sheep::age << endl;
    // cout << st.Tuo::age << endl;

    st.age = 10;
    cout << st.age << endl;
    cout << st.Sheep::age << endl;
    cout << st.Tuo::age << endl;
    return 0;
}